class MyValue {
    public int val;
}
public class Test2 {
    public static void swap(MyValue myValue1,MyValue myValue2) {
        //实现交换
        //实例化了两个对象，两个引用分别指向两个堆上的对象
        //此时，通过方法传参，在虚拟机栈上新创建了两个新的引用，分别指向了实参引用指向的对象
        int tmp = myValue1.val;
        myValue1.val = myValue2.val;
        myValue2.val = tmp;
        //再通过在虚拟机栈上创建一个临时变量，存储形参的引用指向的对象，
        //然后另一个形参引用指向的对象，放入另外一个引用变量指向的变量，
        //最后，把tmp中的变量，放到空形参引用指向的对象堆上，自此完成交换
    }
    public static void main(String[] args) {
        //通过类和对象，实现真正意义上的交换
        MyValue myValue1 = new MyValue();
        myValue1.val = 10;
        MyValue myValue2 = new MyValue();
        myValue2.val = 20;
        System.out.println("交换前：" + myValue1.val);
        System.out.println("交换前：" + myValue2.val);
        swap(myValue1,myValue2);
        System.out.println("交换后：" + myValue1.val);
        System.out.println("交换后：" + myValue2.val);
    }
}
